package com.easylinkin.linkappapi.common.service;

import com.easylinkin.linkappapi.operatelog.entity.ObjectOperateLog;
import com.easylinkin.linkappapi.quality.dto.ActualMeasureTypeDto;
import com.easylinkin.linkappapi.space.entity.LinkappSpace;
import com.easylinkin.linkappapi.tenant.entity.LinkappTenant;

import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;
import site.morn.framework.entity.BaseUser;

/**
 * <p></p>
 * 公共服务
 *
 * @author TongJie
 * @since 2020/4/15 20:47
 */
public interface CommonService {


    /**
     * 设置创建和修改人，创建修改时间信息
     */
    void setCreateAndModifyInfos(Collection objects);

    @Deprecated
    void setCreateInfo(Object obj);

    /**
     * 设置修改人，修改时间信息
     */
    void setModifyInfos(Collection objects);

    void setCreateModifyInfo(BaseUser baseUser, Object object)
            throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;

    /**
     * 设置创建和修改人，创建修改时间信息
     */
    void setCreateAndModifyInfo(Object obj);

    /**
     * 设置租户ID
     * @param obj
     */
    void setTenantIdInfo(Object obj);

    /**
     * 设置修改人，修改时间信息
     */
    void setModifyInfo(Object obj);

    void setLogUserInfo(ObjectOperateLog objectOperateLog);

    /**
     * 获取登录用户的空间(所有有权限的空间，如果是租户管理员，就获取租户下所有空间)
     */
    List<LinkappSpace> getCurrentUserSpace();

    /**
     *  获取登录用户的空间 id 集合
     * @return  登录用户的空间 id 集合
     */
    List<String> getCurrentUserSpaceIds();

    /**
     * 设置休眠时间
     *
     * @param seconds 秒
     */
    void sleep(Double seconds);

    /**
     * 复制实测实量分类与项目到新租户
     * @param tenant
     */
    void copyActualMeasureTypeItem(LinkappTenant tenant);

}
